package com.warom.sdg.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.google.gson.Gson;
import com.warom.sdg.model.UserEntity;

/**
 * 用户偏好设置管理器
 * 负责管理用户信息的SharedPreferences操作
 */
public class UserPreferencesManager {
    private static final String TAG = "UserPreferencesManager";
    private static final String PREF_NAME = "user_prefs";
    private static final String KEY_CURRENT_USER = "current_user";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_USER_ROLE = "user_role";
    private static final String KEY_USER_ID = "user_id";
    private static final String KEY_LAST_LOGIN_TIME = "last_login_time";

    private static final Gson gson = new Gson();

    /**
     * 保存当前用户信息
     * @param context 上下文
     * @param user 用户实体
     */
    public static void saveCurrentUser(Context context, UserEntity user) {
        if (context == null || user == null) {
            Log.e(TAG, "保存用户信息失败: 参数为空");
            return;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            
            // 保存用户信息的JSON字符串
            String userJson = gson.toJson(user);
            editor.putString(KEY_CURRENT_USER, userJson);
            
            // 单独保存重要字段，方便快速访问
            editor.putString(KEY_USERNAME, user.getUsername());
            editor.putString(KEY_USER_ROLE, user.getRole());
            editor.putLong(KEY_USER_ID, user.getId());
            editor.putLong(KEY_LAST_LOGIN_TIME, user.getLastLoginTime());
            
            editor.apply();
            Log.d(TAG, "当前用户信息已保存: " + user.getUsername());
        } catch (Exception e) {
            Log.e(TAG, "保存用户信息失败: " + e.getMessage(), e);
        }
    }
    
    /**
     * 获取当前用户信息
     * @param context 上下文
     * @return 当前用户实体，如果未登录则返回null
     */
    public static UserEntity getCurrentUser(Context context) {
        if (context == null) {
            Log.e(TAG, "获取用户信息失败: 上下文为空");
            return null;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            String userJson = prefs.getString(KEY_CURRENT_USER, null);
            if (userJson != null) {
                return gson.fromJson(userJson, UserEntity.class);
            }
        } catch (Exception e) {
            Log.e(TAG, "获取用户信息失败: " + e.getMessage(), e);
        }
        return null;
    }
    
    /**
     * 获取当前用户名
     * @param context 上下文
     * @return 当前用户名，如果未登录则返回null
     */
    public static String getCurrentUsername(Context context) {
        if (context == null) {
            Log.e(TAG, "获取用户名失败: 上下文为空");
            return null;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            return prefs.getString(KEY_USERNAME, null);
        } catch (Exception e) {
            Log.e(TAG, "获取用户名失败: " + e.getMessage(), e);
            return null;
        }
    }
    
    /**
     * 获取当前用户角色
     * @param context 上下文
     * @return 当前用户角色，如果未登录则返回null
     */
    public static String getCurrentUserRole(Context context) {
        if (context == null) {
            Log.e(TAG, "获取用户角色失败: 上下文为空");
            return null;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            return prefs.getString(KEY_USER_ROLE, null);
        } catch (Exception e) {
            Log.e(TAG, "获取用户角色失败: " + e.getMessage(), e);
            return null;
        }
    }
    
    /**
     * 获取当前用户ID
     * @param context 上下文
     * @return 当前用户ID，如果未登录则返回-1
     */
    public static long getCurrentUserId(Context context) {
        if (context == null) {
            Log.e(TAG, "获取用户ID失败: 上下文为空");
            return -1;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            return prefs.getLong(KEY_USER_ID, -1);
        } catch (Exception e) {
            Log.e(TAG, "获取用户ID失败: " + e.getMessage(), e);
            return -1;
        }
    }
    
    /**
     * 清除当前用户信息（用于登出）
     * @param context 上下文
     */
    public static void clearCurrentUser(Context context) {
        if (context == null) {
            Log.e(TAG, "清除用户信息失败: 上下文为空");
            return;
        }

        try {
            SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.clear();  // 清除所有用户相关的偏好设置
            editor.apply();
            Log.d(TAG, "当前用户信息已清除");
        } catch (Exception e) {
            Log.e(TAG, "清除用户信息失败: " + e.getMessage(), e);
        }
    }
    
    /**
     * 检查用户是否已登录
     * @param context 上下文
     * @return 是否已登录
     */
    public static boolean isUserLoggedIn(Context context) {
        return getCurrentUsername(context) != null;
    }
} 